/**
 * 列表控制器
 *
 * @author LuZhiChao
 * @version 1.0.0, 2017/11/23
 * @see Controller
 * @since 
 */
(function (app, ng) {
    'use strict';

    /**
     * 注册控制器
     */
    app.controller('table.flexigrid.ctrl', FlexiGridController);

    /**
     * 依赖项
     */
    FlexiGridController.$inject = ['$scope', '$controller', 'module', 'table.flexigrid.service']
        .concat(['$state', '$stateParams', '$uibModal', 'dialogs']);

    /**
     * 声明控制器
     * @param $scope 当前作用域
     * @param $controller 控制器服务
     * @param module 当前模块
     * @param Service 当前服务
     * @param $state 路由状态
     * @param $stateParams 路由参数
     * @param $uibModal 模态框服务
     * @param dialogs 提示框服务
     * @constructor
     */
    function FlexiGridController($scope, $controller, module, FlexiGridService, $state, $stateParams, $uibModal, dialogs) {
        // 初始化
        var vm = this;
        extendResourceController();
        var iResource = vm.iResource;

        // 属性声明
        vm.query = {'attribute1': null};
        vm.table = {}; // 表格
        vm.tableOptions = FlexiGridService.tableOptions(tableParam()); // 表格设置

        // 方法引用
        ng.extend(vm, {
            add : add, //新增
            edit:edit, //修改
            del: del, // 删除
            reset: reset, // 重置
            search: search ,// 搜索
            detail:detail ,//详情
            operation:operation //操作

        });

        // 方法声明

        /**
         * 继承Restful控制器
         */
        function extendResourceController() {
            var controller = $controller('iResourceController', {$scope: $scope, module: module, iResource: FlexiGridService});
            ng.extend(vm, controller);
        }

        /**
         * 编辑模态框
         *<br>
         *@param  params
         *@author  WenHaoJiong
         *@return
         *@createTime  2017/11/29 10:05
         */
        function editDialog(params) {
            var resolve = {module:module,data : params || {}};
            var dialog = $uibModal.open ({
                size:'lg',
                templateUrl:'demo/components/table/flexigrid/add-edit-flexigrid.html',
                controller:'flexigrid.edit.ctrl',
                controllerAs:'vm',
                resolve:resolve
            });
            return dialog;
        }

        //新增
        function  add() {
            var dialog = editDialog({'title':'common.add'});
            dialog.result.then(function (data) {
                vm.table.flexReload();
            })
        }

        //修改
        function edit(index) {
            var data = vm.table.getRawRecords(index);
            var dialog = editDialog({'data':data,'title':'common.edit'});
            dialog.result.then(function (data) {
                vm.table.flexReload();
            })
        }
        // 删除
        function del(index) {
            var data = vm.table.getRawRecords(index);
            // 弹出确认删除提示信息
            var dlg = dialogs.confirm(getMessage("common.deleteConfirm"));
            dlg.result.then(function (param) {
                iResource.remove({id: data.id}).then(function (data) {
                    dialogs.notify(data); // 自动弹出提示框
                    vm.table.flexReload(); // 刷新列表
                });
            });
        }

        // 重置
        function reset() {
            vm.query = angular.copy(vm.query);
            search();
        }

        // 搜索
        function search() {
            var param = tableParam();
            vm.table.flexOptions({
                newp: 1,
                extParam: param
            }).flexReload();
        }

        /**
         *<br>
         *@param
         *@return
         *@author  WenHaoJiong
         *@createTime  2017/11/29 11:25
         */
        function detail(index) {
            var data = vm.table.getRawRecords(index);
            var dialog = editDialog({'data':data,'title':'common.detail'});
            dialog.result.then(function (data) {
                vm.table.flexReload();
            })
        }


        /**
         *<br>
         *@param
         *@return
         *@author  WenHaoJiong
         *@createTime  2017/11/29 11:25
         */
        function operation(value) {
            console.log(value);
        }

        /**
         * 创建表格参数
         */
        function tableParam() {
            // 搜索参数
            var param = angular.extend({}, $stateParams, vm.query);
            param[param.searchType] = param.keyword;
            delete param.searchType;
            delete param.keyword;
            return param;
        }
    }
})(iApp.module(), window.angular);